import { Inject, Controller, Get, Query, Post, Body, App } from "@midwayjs/core";
import { Context } from '@midwayjs/koa';
import { UserService } from '../service/user.service.js';
// const  {exec}  =require( 'child_process')
import {exec} from 'child_process'
import fs from 'fs'
import { Application } from "../interface.js";
import { app_fun_dto } from "../models/app_fun.dto.js";

@Controller('/api')
export class APIController {
  @Inject()
  ctx: Context;
  @App('koa')
  app: Application;

  @Inject()
  userService: UserService;

  @Get('/get_user')
  async getUser(@Query('uid') uid) {
    const user = await this.userService.getUser({ uid });
    return { success: true, message: 'OK', data: user };
  }

  @Get('/ngnix/conf')
  async ngnix_conf() {
       var result=await fs.readFileSync("E:\\code\\ngnix\\nginx-1.23.1\\conf\\nginx.conf")
       return {success:true,data:result?.toString()}
  }

  @Get('/exec_ngnix/restart')
  async exec_ngnix(@Query("action") action:string) {
    if(action=='test'){
      var resuilt=await fs.copyFileSync('E:\\code\\ngnix\\nginx-1.23.1\\conf\\nginx.conf.bk','E:\\code\\ngnix\\nginx-1.23.1\\conf\\nginx.conf')
      var workerProcess = exec('nginx   -s reload',{
        cwd: 'E:\\code\\ngnix\\nginx-1.23.1\\'
      })
      // 打印正常的后台可执行程序输出
      workerProcess.stdout.on('data', function (data) {
        console.log('stdout: ' + data)
      })

      // 打印错误的后台可执行程序输出
      workerProcess.stderr.on('data', function (data) {
        console.log('stderr: ' + data)
      })

      // 退出之后的输出
      workerProcess.on('close', function (code) {
        console.log('out code： ngnix重启成功' + code)
      })

    }else if(action=='prod'){
      //       cwd: 'E:\\code\\ngnix\\nginx-1.23.1\\'
      await fs.copyFileSync('E:\\code\\ngnix\\nginx-1.23.1\\conf\\nginx.conf.prod','E:\\code\\ngnix\\nginx-1.23.1\\conf\\nginx.conf')
      var workerProcess = exec('重启nginx.bat',{
        cwd: 'E:\\code\\ngnix\\nginx-1.23.1\\'
      })
      // 打印正常的后台可执行程序输出
      workerProcess.stdout.on('data', function (data) {
        console.log('stdout: ' + data)
      })

      // 打印错误的后台可执行程序输出
      workerProcess.stderr.on('data', function (data) {
        console.log('stderr: ' + data)
      })

      // 退出之后的输出
      workerProcess.on('close', function (code) {
        console.log('out code： ngnix重启成功' + code)
      })




    }else {
      var workerProcess = exec('nginx   -s reload',{
        cwd: 'E:\\code\\ngnix\\nginx-1.23.1\\'
      })
      // 打印正常的后台可执行程序输出
      workerProcess.stdout.on('data', function (data) {
        console.log('stdout: ' + data)
      })

      // 打印错误的后台可执行程序输出
      workerProcess.stderr.on('data', function (data) {
        console.log('stderr: ' + data)
      })

      // 退出之后的输出
      workerProcess.on('close', function (code) {
        console.log('out code： ngnix重启成功' + code)
      })
    }



    return { success: true,  };
  }

  @Get('/exec_ngnix/start')
  async ngnix_start() {
    var workerProcess = exec('nginx ',{
      cwd: 'E:\\code\\ngnix\\nginx-1.23.1\\'
    })
    // 打印正常的后台可执行程序输出
    workerProcess.stdout.on('data', function (data) {
      console.log('stdout: ' + data)
    })

    // 打印错误的后台可执行程序输出
    workerProcess.stderr.on('data', function (data) {
      console.log('stderr: ' + data)
    })

    // 退出之后的输出
    workerProcess.on('close', function (code) {
      console.log('out code： ngnix重启成功' + code)
    })

    return { success: true,  };
  }


  @Post('/exec_ngnix/conf_update')
  async conf_update(@Body() data:any) {
    var content=data?.content;
    console.log("-> content", content);
    var result=await fs.writeFileSync("E:\\code\\ngnix\\nginx-1.23.1\\conf\\nginx.conf",content)
    return {success:true,data:result}
  }

  @Post('/routerhelp/list')
  async routerhelp_list(@Body() data:app_fun_dto) {
  var name=data.name
    var funUrl=data.funUrl
  var queryfun= this.app.systemdb('app_fun').where(1,'=',1)
  if(name){
    queryfun.andWhere('name','like',`%${name}%`)
  }
    if(funUrl){
      queryfun.andWhere('fun_url','like',`%${funUrl}%`)
    }
    var datalist=await queryfun
    return {success:true,data:datalist}
  }


  @Get('/start_node_fuzzsysystem')
  async start_node_fuzzsysystem(@Query("action") action:string) {
    var workerProcess = exec('node   index.js',{
      cwd: 'E:\\code\\font\\fuzzy-query-database-system'
    })
    // 打印正常的后台可执行程序输出
    workerProcess.stdout.on('data', function (data) {
      console.log('stdout: ' + data)
    })

    // 打印错误的后台可执行程序输出
    workerProcess.stderr.on('data', function (data) {
      console.log('stderr: ' + data)
    })

    // 退出之后的输出
    workerProcess.on('close', function (code) {
      console.log('out code： ngnix重启成功' + code)
    })


    return { success: true,  };
  }



}
